package com.thxr.sso.server.util;

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * @Author: silence.Z
 * @CreateTime: 2020/11/9 10:57
 * @Description:
 */
public class HMACSHA1 {

    private static final String MAC_NAME = "HmacSHA1";
    private static final String ENCODING = "UTF-8";
    //private static final String ENCRYPTKEY = "5fa036fdb65d3828d8b772bc4c88db44a945a413f016c0ce51d8fe6ed1e4713d";
    /*
     //展示了一个生成指定算法密钥的过程 初始化HMAC密钥
      public static String initMacKey() throws Exception {
      //得到一个 指定算法密钥的密钥生成器
      KeyGenerator KeyGenerator keyGenerator =KeyGenerator.getInstance(MAC_NAME);
      //生成一个密钥
      SecretKey secretKey =keyGenerator.generateKey();
      return null;
      }
     */

    /**
     * 使用 HMAC-SHA1 签名方法对encryptText进行签名
     *
     * @param encryptText 被签名的字符串
     * @param encryptKey  密钥
     * @return
     * @throws Exception
     */
    public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {
        byte[] data = encryptKey.getBytes(ENCODING);
        //根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
        SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
        //生成一个指定 Mac 算法 的 Mac 对象
        Mac mac = Mac.getInstance(MAC_NAME);
        //用给定密钥初始化 Mac 对象
        mac.init(secretKey);

        byte[] text = encryptText.getBytes(ENCODING);
        //完成 Mac 操作
        return mac.doFinal(text);
    }

    /*public static void main(String[] args) throws Exception {
        //byte[] bytes = HmacSHA1Encrypt("john.doe@domain.com|name|0|1135280708088", ENCRYPTKEY);
        byte[] bytes = HmacSHA1Encrypt("silencezheng@jxthxr.com|name|0|"+"", ENCRYPTKEY);
        String preauth = DatatypeConverter.printHexBinary(bytes);
        System.out.println(preauth);
    }*/
}